package com.xxy.partnermatch.service;

import com.xxy.partnermatch.model.dto.TeamJoinRequest;
import com.xxy.partnermatch.model.dto.TeamQuery;
import com.xxy.partnermatch.model.dto.TeamQuitRequest;
import com.xxy.partnermatch.model.dto.TeamUpdateRequest;
import com.xxy.partnermatch.model.entity.Team;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xxy.partnermatch.model.vo.TeamUserVO;
import com.xxy.partnermatch.model.vo.UserVO;

import java.util.List;

/**
 * @author TX
 * @description 针对表【team(队伍)】的数据库操作Service
 * @createDate 2024-11-19 10:36:36
 */
public interface TeamService extends IService<Team> {

    /**
     * 新增队伍
     *
     * @param team      队伍详情
     * @param loginUser 当前登录用户
     * @return 新增队伍id
     */
    long addTeam(Team team, UserVO loginUser);

    /**
     * 查询队伍列表
     *
     * @param teamQuery 队伍查询请求体
     * @param isAdmin   是否管理员
     * @return 队伍列表 (脱敏)
     */
    List<TeamUserVO> listTeams(TeamQuery teamQuery, boolean isAdmin);

    /**
     * 解散队伍
     *
     * @param id        队伍id
     * @param loginUser 当前登录用户
     * @return 是否解散成功
     */
    boolean deleteTeam(long id, UserVO loginUser);

    /**
     * 修改队伍
     *
     * @param team      修改队伍信息
     * @param loginUser 当前登录用户
     * @return 是否修改成功
     */
    boolean updateTeam(TeamUpdateRequest team, UserVO loginUser);

    /**
     * 加入队伍
     *
     * @param teamJoinRequest 加入队伍请求体
     * @param loginUser       当前登录用户
     * @return 是否成功加入队伍
     */
    boolean joinTeam(TeamJoinRequest teamJoinRequest, UserVO loginUser);

    /**
     * 退出队伍
     * @param teamQuitRequest 用户退出队伍请求体
     * @param loginUser 当前登录用户
     * @return 是否成功退出队伍
     */
    boolean quitTeam(TeamQuitRequest teamQuitRequest, UserVO loginUser);
}
